package com.xbongbong.paas.data.service;/*/*/

import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.domain.entity.PaasFormDataEntity;
import com.xbongbong.paas.domain.entity.ext.PaasAttachmentEntityExt;
import com.xbongbong.paas.pojo.AddMuchFieldPojo;
import com.xbongbong.paas.field.FieldAttrEntity;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.cabinetfile.pojo.dto.CabinetFileDeleteDTO;
import com.xbongbong.pro.cabinetfile.pojo.dto.CabinetFileDownLoadLogDTO;
import com.xbongbong.pro.cabinetfile.pojo.dto.CabinetFileGetDTO;
import com.xbongbong.pro.cabinetfile.pojo.dto.CabinetFileListGetDTO;
import com.xbongbong.pro.cabinetfile.pojo.dto.CabinetFileSaveDTO;
import com.xbongbong.pro.cabinetfile.pojo.vo.CabinetFileDeleteVO;
import com.xbongbong.pro.cabinetfile.pojo.vo.CabinetFileDownLoadLogVO;
import com.xbongbong.pro.cabinetfile.pojo.vo.CabinetFileGetVO;
import com.xbongbong.pro.cabinetfile.pojo.vo.CabinetFileListGetVO;
import com.xbongbong.pro.cabinetfile.pojo.vo.CabinetFileSaveVO;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 *
 * @author 魏荣杰
 * @date 2019/6/20 15:51
 * @since v1.0
 * @version v1.0
 */
public interface CabinetFileService {
    /**
     * Description: 保存文件柜数据
     * @param cabinetFileSaveDTO
     * @return com.xbongbong.pro.cabinetfile.pojo.vo.CabinetFileSaveVO
     * @author 魏荣杰
     * @date 2019/6/20 16:20
     * @since v1.0
     */
    CabinetFileSaveVO saveCabinetFiles(@Valid CabinetFileSaveDTO cabinetFileSaveDTO) throws XbbException;

    /**
     * Description: 获取文件柜数据
     * @param cabinetFileGetDTO
     * @return com.xbongbong.pro.cabinetfile.pojo.vo.CabinetFileGetVO
     * @author 魏荣杰
     * @date 2019/6/20 20:23
     * @since v1.0
     */
    CabinetFileGetVO getCabinetFiles(CabinetFileGetDTO cabinetFileGetDTO) throws XbbException;
    /**
     * Description:保存表单数据的附件
     * @param explainMap
     * @param data
     * @param subFormData
     * @param corpid
     * @param dataId
     * @param businessType
     * @param userId
     * @author 魏荣杰
     * @date 2019/6/24 17:32
     * @since v1.0
     * @throws XbbException
     */
    void saveDataCabinetFile(Map<String, FieldAttrEntity> explainMap, JSONObject data, JSONObject subFormData, String corpid, Long dataId, Integer businessType, String userId) throws XbbException;

    /**
     * Description:保存表单数据的附件
     * @param explainMap 字段容器
     * @param paasFormDataEntity 数据容器
     * @param corpid 公司id
     * @param dataId 数据id
     * @param businessType 业务类型
     * @param userId
     * @author 吴峰
     * @date 2021/2/25 10:54
     * @since v1.0
     * @throws XbbException
     */
    void saveDataCabinetFile(Map<String, FieldAttrEntity> explainMap, PaasFormDataEntity paasFormDataEntity, String corpid, Long dataId, Integer businessType, String userId) throws XbbException;

    /**
     * 阶段推进器 - 保存阶段推进器的附件
     * @param cabinetFileEntities
     * @param corpid
     * @param dataId
     * @param businessType
     * @param userId
     * @throws XbbException
     */
    void saveDataCabinetFile4StageThruster(List<PaasAttachmentEntityExt> cabinetFileEntities, String corpid, Long dataId, Integer businessType, String userId, Long refId) throws XbbException;

    /**
     * 批量增加业务时需要批量处理图片
     *
     * @param explainMap 解释
     * @param insertList 这是带有id的插入列表
     * @param updateBatchList 更新数据列表
     * @param delBatchList 删除数据列表
     * @param corpid 公司id
     * @param businessType 业务类型
     * @param userId 用户id
     * @throws XbbException
     */
    void saveBatchCabinetFile(Map<String, FieldAttrEntity> explainMap,  List<AddMuchFieldPojo> insertList, List<AddMuchFieldPojo> updateBatchList,
                              List<AddMuchFieldPojo> delBatchList, String corpid, Integer businessType, String userId) throws XbbException, IllegalAccessException, InstantiationException;
    /**
     * Description: 获取文件柜list
     * @param cabinetFileListGetDTO
     * @return com.xbongbong.pro.cabinetfile.pojo.vo.CabinetFileListGetVO
     * @author 魏荣杰
     * @date 2019/6/25 16:25
     * @since v1.0
     */
    CabinetFileListGetVO getCabinetFileList(CabinetFileListGetDTO cabinetFileListGetDTO) throws XbbException;
    /**
     * Description: 删除文件柜 文件
     * @param cabinetfileDeleteDTO
     * @return com.xbongbong.pro.cabinetfile.pojo.vo.CabinetFileDeleteVO
     * @author 魏荣杰
     * @date 2019/6/26 17:04
     * @since v1.0
     */
    CabinetFileDeleteVO deleteFiles(CabinetFileDeleteDTO cabinetfileDeleteDTO) throws XbbException;
    /**
     * Description: 下载文件柜 文件日志
     * @param cabinetFileDownLoadLogDTO
     * @return CabinetFileDownLoadLogVO
     * @author youli.chen
     * @date 2019/6/26 17:04
     * @since v1.0
     */
    CabinetFileDownLoadLogVO downLoadLog(CabinetFileDownLoadLogDTO cabinetFileDownLoadLogDTO) throws XbbException;
}
